package service;

import dao.CityDao;
import java.sql.SQLException;
import java.util.List;
import po.City;
import po.PageCity;

/**
 * Create By IntelliJ IDEA
 *
 * @author: jsonor
 * @create-Time: 2017/10/17 8:37
 * @description: citydao的组合和包装
 */
public class CityService {

  CityDao citydao = new CityDao();

  /**
   * 查询所有的city数据
   *
   * @return city数据的集合
   * @throws SQLException
   */
  public List<City> finaAll() throws SQLException {
    return citydao.findAll();
  }

  /**
   * 通过id删除对应数据
   *
   * @param id 删除数据对应的id值
   * @return 被操作的数据数量
   * @throws SQLException
   */
  public int deleteById(int id) throws SQLException {
    return citydao.deleteSingleById(id);
  }

  /**
   * 通过id 查询city
   *
   * @param id 需要查询的city的id
   * @return city数据
   */
  public City findById(int id) throws SQLException {
    return citydao.findById(id);
  }

  /**
   * 根据id更新数据表city中的数据
   *
   * @param city city
   * @return 更新的数据数量
   */
  public int updateById(City city) throws SQLException {
    return citydao.updateById(city);
  }

  /**
   * 添加新的城市信息
   *
   * @param city 城市
   */
  public int add(City city) throws SQLException {
    return citydao.add(city);
  }

  /**
   * 通过countryCode查询城市信息
   *
   * @param countryCode 城市代码
   * @return 城市信息的集合
   */
  public List<City> findByCountryCode(String countryCode) throws SQLException {
    return citydao.findByCountryCode(countryCode);
  }

  /**
   * 通过pageId获取对应的城市数据
   *
   * @param pageId 查询第几页
   * @param pageCount 每页city个数
   * @param itemCount 选择项的数量
   * @return PageCity对象
   */
  public PageCity findCityByPageId(int pageId, int pageCount, int itemCount) throws SQLException {
    PageCity city = new PageCity();

    // 1. 查询出一共由几条记录
    int cityCount = citydao.cityCount();
    int totalPage = (int)Math.ceil(cityCount / pageCount);
    city.setTotalPage(totalPage);

    // 2. 查询出城市信息
    List<City> cities = citydao.findLimit(pageId * pageCount, pageCount);
    city.setCities(cities);
    city.setPageIndex(pageId);

    // 计算startPageIndex
    int startPageIndex = pageId - itemCount / 2;
    while (startPageIndex < 0) {
      startPageIndex++;
    }

    while (startPageIndex + itemCount > totalPage) {
      startPageIndex--;
    }
    city.setStartPageIndex(startPageIndex);
    city.setEndPageIndex(startPageIndex + itemCount);

    return city;
  }
}
